/**
 * 包含easyui的扩展和常用的方法
 */
var Paladin = $.extend({}, Paladin);/* 定义全局对象，类似于命名空间或包的作用 */

/**
 * 使panel和datagrid在加载时提示
 */
$.fn.panel.defaults.loadingMessage = '加载中....';
$.fn.datagrid.defaults.loadMsg = '加载中....';

$.fn.calendar.defaults.weeks = [ '日', '一', '二', '三', '四', '五', '六' ];
$.fn.calendar.defaults.months = [ '一月', '二月', '三月', '四月', '五月', '六月', '七月',
		'八月', '九月', '十月', '十一月', '十二月' ];
$.fn.datebox.defaults.currentText = '今天';
$.fn.datebox.defaults.closeText = '关闭';
$.fn.datebox.defaults.okText = '确定';

/**
 * datagrid信息
 */
$.fn.datagrid.defaults.pageSize = 10;
$.fn.datagrid.defaults.pageList = [ 10, 20, 30 ];
$.fn.pagination.defaults.displayMsg = '当前显示 {from} - {to} 条记录   共 {total} 条记录';
$.fn.pagination.defaults.afterPageText = '页  共{pages}页';
$.fn.datagrid.defaults.rownumbers = true;
$.fn.datagrid.defaults.nowrap = false;
$.fn.datagrid.defaults.striped = true;
$.fn.datagrid.defaults.collapsible = false;
$.fn.datagrid.defaults.remoteSort = false;
$.fn.datagrid.defaults.fitColumns = true;

/**
 * 通用错误提示 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
 */
var easyuiErrorFunction = function(XMLHttpRequest) {
	$.messager.progress('close');
	$.messager.alert('报错信息', XMLHttpRequest.responseText);
};
$.fn.datagrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.treegrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.tree.defaults.onLoadError = easyuiErrorFunction;
$.fn.combogrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.combobox.defaults.onLoadError = easyuiErrorFunction;
$.fn.form.defaults.onLoadError = easyuiErrorFunction;

/**
 * 获取事件所在的datagrid组件
 * 
 * @param e 事件
 * @returns
 */
function getDatagrid(e) {
	return $(e.target).closest("div.datagrid-view").children(".datagrid-f")[0];
}
/**
 * 声明临时变量
 */
var cmenu = null;

/**
 * dadtagrid右键column事件
 */
var easyuiHeaderContextMenu = function(e, field) {
	e.preventDefault();
	if (!cmenu) {
		createColumnMenu(getDatagrid(e));
	}
	cmenu.menu('show', {
		left : e.pageX,
		top : e.pageY
	});
}

/**
 * 创建datagrid右键面板
 * @param et datagrid组件
 */
function createColumnMenu(et) {
	cmenu = $('<div/>').appendTo('body');
	cmenu.menu({
		onClick : function(item) {
			if (item.iconCls == 'icon-ok') {
				$(et).datagrid('hideColumn', item.name);
				cmenu.menu('setIcon', {
					target : item.target,
					iconCls : 'icon-empty'
				});
			} else {
				$(et).datagrid('showColumn', item.name);
				cmenu.menu('setIcon', {
					target : item.target,
					iconCls : 'icon-ok'
				});
			}
		}
	});
	var fields = $(et).datagrid('getColumnFields');
	var fLen = fields.length;
	for (var i = 0; i < fLen; i++) {
		var field = fields[i];
		var col = $(et).datagrid('getColumnOption', field);
		if (col.checkbox != undefined) {
			continue;
		}
		cmenu.menu('appendItem', {
			text : col.title,
			name : field,
			iconCls : 'icon-ok'
		});
	}
}
/**
 * 重写datagrid右键column事件
 */
$.fn.datagrid.defaults.onHeaderContextMenu = easyuiHeaderContextMenu;

/**
 * 防止panel/window/dialog组件超出浏览器边界
 * 
 * @param left
 * @param top
 * @return
 */
var easyuiPanelOnMove = function(left, top) {
	var l = left;
	var t = top;
	if (l < 1) {
		l = 1;
	}
	if (t < 1) {
		t = 1;
	}
	var width = parseInt($(this).parent().css('width')) + 14;
	var height = parseInt($(this).parent().css('height')) + 14;
	var right = l + width;
	var buttom = t + height;
	var browserWidth = $(window).width();
	var browserHeight = $(window).height();
	if (right > browserWidth) {
		l = browserWidth - width;
	}
	if (buttom > browserHeight) {
		t = browserHeight - height;
	}
	$(this).parent().css({/* 修正面板位置 */
		left : l,
		top : t
	});
};

$.fn.dialog.defaults.onMove = easyuiPanelOnMove;
$.fn.window.defaults.onMove = easyuiPanelOnMove;
$.fn.panel.defaults.onMove = easyuiPanelOnMove;

/**
 * 提示信息
 * 
 * @msg 提示框内容
 */
Paladin.messagerShow = function(options) {
	var opts = $.extend({
		title : "提示"
	}, options);
	return $.messager.show(opts);
}

Paladin.messagerConfirm = function(title, msg, fn) {
	return $.messager.confirm(title, msg, fn);
};

Paladin.messagerAlert = function(msg) {
	return $.messager.alert('提示', msg);
};

Paladin.messagerAlert = function(title, msg) {
	return $.messager.alert(title, msg);
};

Paladin.messagerAlert = function(title, msg, fn) {
	return $.messager.alert(title, msg, fn);
};

/**
 * Dialog 添加onClose事件
 */
Paladin.dialog = function(options) {
	var opts = $.extend({
		modal : true,
		onClose : function() {
			$(this).dialog('destroy');
		}
	}, options);
	return ($('<div/>').dialog(opts));
};

/**
 * 处理Window取消按钮
 */
Paladin.winclose = function(obj) {
	obj.dialog('destroy');
}

/**
 * 获得选中的对象集合
 */
Paladin.getChecked = function(obj) {
	var rows = obj.datagrid('getChecked');
	var ids = [];
	if (rows.length == 1) {
		return rows[0];
	}
	return null;
}

/**
 * panel关闭时回收内存
 */
$.fn.panel.defaults.onBeforeDestroy = function() {
	var frame = $('iframe', this);
	try {
		if (frame.length > 0) {
			for (var i = 0; i < frame.length; i++) {
				frame[i].contentWindow.document.write('');
				frame[i].contentWindow.close();
			}
			frame.remove();
			if ($.browser.msie) {
				CollectGarbage();
			}
		}
	} catch (e) {
	}
};

/**
 * 
 * 将form表单元素的值序列化成对象
 * 
 * @returns object
 */
Paladin.serializeObject = function(form) {
	var o = {};
	$.each(form.serializeArray(), function(index) {
		if (o[this['name']]) {
			o[this['name']] = o[this['name']] + "," + this['value'];
		} else {
			o[this['name']] = this['value'];
		}
	});
	return o;
};

/**
 * 密码重复校验
 */
$.extend($.fn.validatebox.defaults.rules, {
	equals : {
		validator : function(value, param) {
			return value == $(param[0]).val();
		},
		message : "输入的两次密码必须一致"
	}
});
